package org.wejob;

import org.apache.curator.RetryPolicy;
import org.apache.curator.retry.*;

public class ZkRetryPolicy {
    /**
     * 实例化zookeeper 客户端
     * 重试之间的睡眠时间随着重试的次数增加而增加
     * curator链接zookeeper的策略:ExponentialBackoffRetry
     * baseSleepTimeMs：重试之间的初始等待时间
     * maxRetries：最大重试次数
     * maxSleepMs：最大重试时间
     */
    RetryPolicy retryPolicy1 = new ExponentialBackoffRetry(1000, 5,2000);

    /**
     * curator链接zookeeper的策略:BoundedExponentialBackoffRetry
     * baseSleepTimeMs : 重试之间的初始等待时间
     * maxSleepTimeMs : 重试之间的最大等待时间
     * maxRetries : 重试的最大次数
     * 继承于 ExponentialBackoffRetry 类
     * 给SleepTimeMs 设限，不能超过传入的 maxSleepTimeMs
     */
    RetryPolicy retryPolicy2 = new BoundedExponentialBackoffRetry(1000,3000,3);


    /**
     * curator链接zookeeper的策略:RetryNTimes
     * n：重试的次数
     * sleepMsBetweenRetries：每次重试间隔的时间
     */
    RetryPolicy retryPolicy3 = new RetryNTimes(3, 5000);

    /**
     * curator链接zookeeper的策略:RetryOneTime
     * 特殊的RetryNTimes,其实内部还是调用的RetryNTimes的构造函数，只是重试次数设置为1
     * sleepMsBetweenRetry:每次重试间隔的时间
     */
    RetryPolicy retryPolicy4 = new RetryOneTime(3000);

    /**
     * curator链接zookeeper的策略:RetryUntilElapsed
     * maxElapsedTimeMs:最大重试时间
     * sleepMsBetweenRetries:每次重试间隔
     * 重试时间超过maxElapsedTimeMs后，就不再重试
     */
    RetryPolicy retryPolicy5 = new RetryUntilElapsed(2000, 3000);


    /**
     * curator链接zookeeper的策略:RetryForever
     * retryIntervalMs：重试间隔时间
     * 永远重试，不推荐使用
     */
    RetryPolicy retryPolicy6 = new RetryForever(1000);



    /**
     * curator链接zookeeper的策略:SessionFailedRetryPolicy
     * delegatePolicy: 代理策略实例
     * 在注入的其他策略的实例上面，预先判断Session有没有过期，过期了就不允许再进行重试，感觉类似于代理模式
     */
    //RetryPolicy retryPolicy7 = new SessionFailedRetryPolicy(retryPolicy1);


}
